トップへ戻るニュースフォーラムFLASH-ML 過去ログBak@Flaダウンロードよくある質問と答
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   迷える子羊の部屋【初心者専用】
     コンテナ内に入れ子にしたLoaderオブジェクトの名前に関して
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
Shiena
Åê¹ÆNo.42544
投稿日時: 2009-6-12 0:41
新米
居住地:
投稿: 4
使用環境:
コンテナ内に入れ子にしたLoaderオブジェクトの名前に関して
投稿は初めてさせていただきます。よろしくお願いいたします。
普段から色々学ばせていただいております。
FlashCS4 AS3で作業をしています。

タイトル通りなのですが、言葉を選ぶこともままならない初心者です。

■質問
(スライドショーのようなものを作ると考えていただければいいのですが><)
外部XMLから3枚の画像をLoaderで読み込みました。
そのあと、container:SpriteをaddChildで追加しました。
しかる後に、xmlから読み込んだ画像をfor文で繰り返し、3個の画像(img:loader)をaddChildにてコンテナ内に追加しました。
(このときimgをimgxのように配列にしたかったのですが、当方の能力ではまるで解りませんでした)

1枚あたりの画像クリックで、サイズ変更をしたかったのですが、どうしても名前がわからず、対象にアクセスできません。

getChildByNameを使用したり、imgに.nameで名前を付けても、クリックした画像(というか、Loaderオブジェクトというのでしょうか?)の名前を取ることができません。

現状の手段にこだわる必要などはないので、その他手段でも結構です。
言葉知らずで、解読が出来ない部分も多数あると思いますが、解決方法などがございましたら、ご助力をお願いいたします。

function createImg() {
var i:int;
var container:Sprite = new Sprite();
addChild(container);

for(i = 0; i < counter; i++){
var img1:Loader = new Loader();
var theUrl:URLRequest = new URLRequest(photo_list[i]);
img1.name = "List"+i;
container.addChild(img1);
}
}

画像の表示などは、うまくいっているのですが…
野中文雄
Åê¹ÆNo.42545
投稿日時: 2009-6-12 1:41
ちょんまげら
居住地: 東京
投稿: 4247
使用環境:
CS4 .4.11 Vista Home Premium (SP1)
Re: コンテナ内に入れ子にしたLoaderオブジェクトの名前に関して
取りあえず、「変数名、インスタンス名について」が参考になりそうに思います。


----------------
 

Shiena
Åê¹ÆNo.42549
投稿日時: 2009-6-12 13:30
新米
居住地:
投稿: 4
使用環境:
Re: コンテナ内に入れ子にしたLoaderオブジェクトの名前に関して
ありがとうございます!無事に配列に出来ました!

しかしながら、クリックされた対象の名前を参照することが、やはり出来ません…画像を表示し、クリックされた対象の画像に、拡大処理などをしたいのですが、私自身根本的に何か理解が足りない・勘違いをしているようです…

Loaderではなく、Spriteにイベントリスナーを、addChildするものに割り当てればよいのかと思い、実行したのですがやはりこれもまた無理でした…いかなる手段を取ればよいのか、見当がつきません。

稚拙な質問で、まことに申し訳ありませんが、よろしくお願いいたします…
永井勝則
Åê¹ÆNo.42551
投稿日時: 2009-6-12 19:50
職人
居住地: 白馬村
投稿: 751
使用環境:
Windows 7 :Flash CS4:
10.5.8 :Flash CS4
Re: コンテナ内に入れ子にしたLoaderオブジェクトの名前に関して
配列を使った方法とは異なりますが、XMLからデータを取り、
画像を読み込んで、クリックする方法をいくつか作成しましたので、参考にしてみてください。

XMLはこんな構造です。
<datas>
<data id = "1">
<url>image1.jpg</url>
<desc>イメージ1の画像</desc>
</data>
<datas>

// メインのタイムライン
// Loaderをロードのたびに作成する

var xmlLoader:URLLoader = new URLLoader();
var xmlData:XML;
var imageCnt:int=0;

xmlLoader.addEventListener(Event.COMPLETE, onXMLComplete);
var req:URLRequest=new URLRequest("data.xml");
xmlLoader.load(req);

function onXMLComplete(evt:Event):void {
	xmlData=new XML(evt.target.data);
	imageCnt=xmlData..data.length();
	xmlLoader.removeEventListener(Event.COMPLETE, onXMLComplete);
	//trace(xmlData.data[0].url);
	imageLoad(loadIndex);
}

var loadIndex:int=0;
var loader:Loader;

function imageLoad(index:int):void {
	loader = new Loader();
	loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onImageComplete);
	var imageURL:URLRequest=new URLRequest("images/"+xmlData.data[index].url);
	loader.load(imageURL);
}

function onImageComplete(evt:Event):void {
	addChild(loader);
	loader.x=loadIndex*loader.width/2;
	// Loaderにはこれらのプロパティはない
	// loader.useHandCursor=true
	//loader.buttonMode=true;
	loader.name="sp"+loadIndex;
	loader.addEventListener(MouseEvent.CLICK, onClick);
	doNext();
}

function onClick(evt:MouseEvent):void {
	trace(evt.target.name);
	var theTarget:Loader=evt.target as Loader
	theTarget.scaleX*=1.1;
}

function doNext() {
	loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, onImageComplete);
	loader = null;
	
	if (loadIndex<imageCnt-1) {
		loadIndex++;
		imageLoad(loadIndex);
	} else {
		trace("ロード終了");
	}
}


// Loaderを使いまわす

var xmlLoader:URLLoader = new URLLoader();
var xmlData:XML;
var imageCnt:int=0;

var loader:Loader = new Loader();
var loadIndex:int=0;

xmlLoader.addEventListener(Event.COMPLETE, onXMLComplete);
var req:URLRequest=new URLRequest("data.xml");
xmlLoader.load(req);

function onXMLComplete(evt:Event):void {
	xmlData=new XML(evt.target.data);
	imageCnt=xmlData..data.length();
	xmlLoader.removeEventListener(Event.COMPLETE, onXMLComplete);
	//trace(xmlData.data[0].url);
	imageLoad(loadIndex);
}

function imageLoad(index:int):void {
	loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onImageComplete);
	var imageURL:URLRequest=new URLRequest("images/"+xmlData.data[index].url);
	loader.load(imageURL);
}

function onImageComplete(evt:Event):void {
	// Bitmapをメインのタイムラインに追加
	/*
	var cont:Bitmap=evt.target.content;
	addChild(cont);
	cont.x=loadIndex*cont.width/2;
	// BitmapはInteractiveObject クラスのサブクラスではないため、マウスイベントを送出できない
	cont.addEventListener(MouseEvent.CLICK, onClick)
	doNext();
	*/
	
	// BitmapをSpriteの子に追加 A
	/*
	var sp:Sprite = new Sprite();
	var cont:Bitmap=evt.target.content;
	sp.addChild(cont);
	sp.x=loadIndex*sp.width/2;
	sp.useHandCursor=true
	sp.buttonMode=true;
	sp.name="sp"+loadIndex;
	sp.addEventListener(MouseEvent.CLICK, onClick);
	addChild(sp);
	doNext();
	*/

	// BitmapをSpriteの子に追加 B
	var sp:Sprite = new Sprite();
	// Loaderの子はBitmap
	// trace(loader.getChildAt(0) is Bitmap);
	var bitmap:Bitmap=loader.getChildAt(0) as Bitmap;
	sp.addChild(bitmap);
	sp.x=loadIndex*sp.width/2;
	sp.name="sp"+loadIndex;
	sp.useHandCursor=true
	sp.buttonMode=true;
	sp.addEventListener(MouseEvent.CLICK, onClick);
	addChild(sp);
	doNext();
}

function onClick(evt:MouseEvent):void {
	trace(evt.target.name);
	var theTarget:Sprite=evt.target as Sprite;
	theTarget.scaleX*=1.1;
}

function doNext() {
	loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, onImageComplete);

	if (loadIndex<imageCnt-1) {
		loadIndex++;
		imageLoad(loadIndex);
	} else {
		trace("ロード終了");
	}
}


----------------
永井勝則:
himco.jp :

Shiena
Åê¹ÆNo.42553
投稿日時: 2009-6-12 22:39
新米
居住地:
投稿: 4
使用環境:
Re: コンテナ内に入れ子にしたLoaderオブジェクトの名前に関して
ありがとうございます!
これほどの分量になってしまうのですね。お時間使わせてしまって申し訳ないです汗

早速一晩使って解読をします!(すらすら読めないのでw)おそらく、解らないことだらけだと思うのですが、まずは作りつつ読んでみます!
野中文雄
Åê¹ÆNo.42554
投稿日時: 2009-6-12 23:27
ちょんまげら
居住地: 東京
投稿: 4247
使用環境:
CS4 .4.11 Vista Home Premium (SP1)
Re: コンテナ内に入れ子にしたLoaderオブジェクトの名前に関して
ご紹介したトピックに述べられているとおり、通常「名前を参照」しない方が端的だと思います。DisplayObjectContainer.getChildAt()メソッドを使ったのでは、ダメなのでしょうか。

なお、トピック内で私が引用した記事では、DisplayObjectContainer.getChildByName()メソッドを使ってインスタンスの参照ができています。「何か理解が足りない・勘違いをしている」のでしょう。しかし、試された内容のご説明がなければ、それが具体的にどの点なのかは指摘できません。
引用:
Shienaさんは書きました:
しかしながら、クリックされた対象の名前を参照することが、やはり出来ません…画像を表示し、クリックされた対象の画像に、拡大処理などをしたいのですが、私自身根本的に何か理解が足りない・勘違いをしているようです…


----------------
 

Shiena
Åê¹ÆNo.42570
投稿日時: 2009-6-14 4:49
新米
居住地:
投稿: 4
使用環境:
Re: コンテナ内に入れ子にしたLoaderオブジェクトの名前に関して
ちょんまげらさん、永井勝則さん、ありがとうございました!
お二方の回答で無事に目的のものの作成が出来ました!

何か理解が足りない・勘違いをしている、に関してなのですが、いかんせんAS3に障り始めたばかりで、質問をするにあたり、言葉が適切なものを選べているかどうかすら解らない状態でありました。

解決まで導いてくださったお二方、本当にありがとうございました!
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 
Copyright (C) 2003 FLASH-japan. All rights reserved.
Powered by Xoops